iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
自我挑戰組

用 30 天和 ASP.NET Core 打造一個活動報名管理系統系列 第 23

ASP.NET Core - 活動報名管理系統:Day23 ASP.NET Core Identity & RazorPage

  • 分享至 

  • xImage
  •  

前言

昨天將 ASP.NET Core Identity 加入到專案內了,而今天我們就要來看看,當初勾選的驗證功能,能不能正常運作。
因為 ASP.NET Core Identity 的程式是使用 RazorPage 來達成,所以也會講一下 RazorPage 的撰寫以及運作方式。

RazorPage

相信蠻多人有聽過 ASP.NET WebForm 這一個框架,如果你是讀高職資訊科,通常都學的程式語言有蠻大機率是 VB 的,而 ASP.NET WebForm 就是類似 VB 的程式框架。

它提供以拖曳元件的方式來組成頁面功能,不需要撰寫太多的 HTML 與 JS,即可與後端的 Function 進行互動,並且每一個 .aspx 頁面都有一個對應的 .aspx.cs 後端程式。

而 RazorPage 我認為可以當作是移除掉拖曳元件功能的 Webform,它一樣擁有一個頁面與一個後端程式對應的模式,只不過是從 .aspx, .aspx.cs 變成了 .cshtml, .cshtml.cs,簡單說就是變成使用 Razor 語法來開發前端網頁的部分。

如果你會撰寫 ASP.NET (Core) MVC,那麼 RazorPage 肯定也很快就可以上手,我們實際來看程式碼:

.cshtml

@page
@model IndexModel
@{
    ViewData["Title"] = "Profile";
    ViewData["ActivePage"] = ManageNavPages.Index;
}

<h3>@ViewData["Title"]</h3>
<partial name="_StatusMessage" for="StatusMessage" />
<div class="row">
    <div class="col-md-6">
        <form id="profile-form" method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-floating">
                <input asp-for="Username" class="form-control" disabled />
                <label asp-for="Username" class="form-label"></label>
            </div>
            <div class="form-floating">
                <input asp-for="Input.PhoneNumber" class="form-control" />
                <label asp-for="Input.PhoneNumber" class="form-label"></label>
                <span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
            </div>
            <button id="update-profile-button" type="submit" class="w-100 btn btn-lg btn-primary">Save</button>
        </form>
    </div>
</div>

@section Scripts {
    <partial name="_ValidationScriptsPartial" />
}

這是 Identity 所產生的 Manage/Index.cshtml,其實就和撰寫 MVC 的 View 是一樣的,畢竟都是使用 Razor 語法,再來看看 .cshtml.cs

.cshtml.cs

此為前半段的程式碼,可以看到有著建構子,也有注入 DI 的 Property,但截圖的下半部又像是 Model 的內容,其實 RazorPage 的頁面後端程式就是 Model 與 Controller 的結合,再往下看剩餘的程式碼:

.cshtml.cs 預設會擁有 OnGet, OnPost 的 Function,顧名思義就是執行 GET 或是 POST 的 HttpMethod,程式碼整體來看都算是好懂。

DbContext

OnModelCreating() 加入 base.OnModelCreating(modelBuilder);,再執行 dotnet ef migrations adddotnet ef database update,讓 EF Core 在 DB 建立 Identity 所需的 Table。

Startup.cs

ConfigureServices 加入:

services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<AppDbContext>()
        .AddDefaultUI()
        .AddDefaultTokenProviders();

Configure 加入:

app.UseAuthentication();

UseEndpoints 新增 RazorPage 的服務:

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapRazorPages();
            });

_Layout.cshtml

Identity 在 Shared 資料夾產生了 _LoginPartial.cshtml 這一個 PartialView,是讓畫面可以顯示註冊/登入的 Button。
在 _Layout.cshtml,navbar 的地方加入此 PartialView:

@await Html.PartialAsync("_LoginPartial")

實際畫面

右上角多了 PartialView 的註冊/登入按鈕,點擊註冊:

將欄位填寫並送出,畫面自動導向回首頁,右上角變成登入使用者的 Email Address 與登出 Button:

到 DB 查看 [AspNetUsers] Table,也確實有新增帳號資料:

點擊 Email 後,會導向至後台功能頁面,類似會員中心:

可以看到左側選單就是當初選擇要導入的 Identity 服務:

點擊 Logout 也能正常登出,基本上 Identity 的功能都簡單測試完畢,並且是可以運作的。

本日結語

今天將 ASP.NET Core Identity 相關的 Code 設定好,並實際測試了功能,明天會開始將驗證應用在活動舉辦/報名上,也應該算是要製作系統的核心商業邏輯。

那麼明天見了!

本日結語

Reference

在 ASP.NET Core專案中新增 Identity 、下載和刪除自訂使用者資料
The entity type 'IdentityUserLogin' requires a primary key to be defined [duplicate]


上一篇
ASP.NET Core - 活動報名管理系統:Day22 ASP.NET Core Identity
下一篇
ASP.NET Core - 活動報名管理系統:Day24 將身分驗證加到 Controller 與 Action
系列文
用 30 天和 ASP.NET Core 打造一個活動報名管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言